<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "https://www.w3.org/TR/html4/loose.dtd">
<html lang="zh-CN"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta http-equiv="Content-Language" content="zh-CN"><link href="stylesheet.css" media="all" rel="stylesheet" type="text/css">
<title>权限</title>
<script> var _hmt = _hmt || []; (function() { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?d286c55b63a3c54a1e43d10d4c203e75"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script>
</head><body class="SECT1">
<div>
<table summary="Header navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><th colspan="5" align="center" valign="bottom">PostgreSQL 8.2.3 中文文档</th></tr>
<tr><td width="10%" align="left" valign="top"><a href="role-attributes.html" accesskey="P">后退</a></td><td width="10%" align="left" valign="top"><a href="user-manag.html">快退</a></td><td width="60%" align="center" valign="bottom">章18. 数据库角色和权限</td><td width="10%" align="right" valign="top"><a href="user-manag.html">快进</a></td><td width="10%" align="right" valign="top"><a href="role-membership.html" accesskey="N">前进</a></td></tr>
</table>
<hr align="LEFT" width="100%"></div>
<div class="SECT1"><h1 class="SECT1"><a name="PRIVILEGES">18.3. 权限</a></h1><a name="AEN22640"></a><a name="AEN22642"></a><a name="AEN22644"></a><a name="AEN22646"></a>
<p>在创建对象的时候，它会被赋予一个所有者。通常所有者就是执行创建语句的角色。对于大多数类型的对象，初始状态是只有所有者(或者超级用户)可以对该对象做任何事情。要允许其它用户使用这个对象，必须赋予相应的<i class="FIRSTTERM">权限</i>。系统里面有好几种不同类型的权限：<tt class="LITERAL">SELECT</tt>, <tt class="LITERAL">INSERT</tt>, <tt class="LITERAL">UPDATE</tt>, <tt class="LITERAL">DELETE</tt>, <tt class="LITERAL">REFERENCES</tt>, <tt class="LITERAL">TRIGGER</tt>, <tt class="LITERAL">CREATE</tt>, <tt class="LITERAL">CONNECT</tt>, <tt class="LITERAL">TEMPORARY</tt>, <tt class="LITERAL">EXECUTE</tt>, <tt class="LITERAL">USAGE</tt> 。有关 PostgreSQL 支持的不同类型权限的更多信息，请参阅 <a href="sql-grant.html"><i>GRANT</i></a> 参考页。</p>
<p>使用 <tt class="COMMAND">GRANT</tt> 命令赋予权限。如果 <tt class="LITERAL">joe</tt> 是一个现有的角色，而 <tt class="LITERAL">accounts</tt> 是一个现有的表，那么可以用下面的命令更新表的权限：</p>
<pre class="PROGRAMLISTING">GRANT UPDATE ON accounts TO joe;</pre>
<p>我们可以用特殊的名字 <tt class="LITERAL">PUBLIC</tt> 把对象的权限赋予系统中的所有角色。在权限声明的位置写上 <tt class="LITERAL">ALL</tt> 表示把适用于该对象的所有权限都赋予目标角色。</p>
<p>要撤销权限，使用 <a href="sql-revoke.html"><i>REVOKE</i></a> 命令：</p>
<pre class="PROGRAMLISTING">REVOKE ALL ON accounts FROM PUBLIC;</pre>
<p>对象的所有者是一个特殊的权限(也就是修改和删除对象的权限)，总是隐含地属于所有者，不能赋予或者删除。但是所有者可以选择撤销他自己拥有的普通权限，比如，把一个表做成对自己是只读的或者其它什么。</p>
<p>只要对象的类型合适，我们就可以用一个 <tt class="COMMAND">ALTER</tt> 命令给这个对象赋予一个新的所有者。超级用户总是能做这件事；普通的角色只能是在他们目前是该对象的所有者(或者是所有角色的成员)并且是新的所有角色的成员的情况下才能做这个事情。</p>
</div>
<div>
<hr align="LEFT" width="100%">
<table summary="Footer navigation table" width="100%" border="0" cellpadding="0" cellspacing="0">
<tr><td width="33%" align="left" valign="top"><a href="role-attributes.html" accesskey="P">后退</a></td><td width="34%" align="center" valign="top"><a href="index.html" accesskey="H">首页</a></td><td width="33%" align="right" valign="top"><a href="role-membership.html" accesskey="N">前进</a></td></tr>
<tr><td width="33%" align="left" valign="top">角色属性</td><td width="34%" align="center" valign="top"><a href="user-manag.html" accesskey="U">上一级</a></td><td width="33%" align="right" valign="top">角色成员</td></tr>
</table>
</div>
</body></html>